/* Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
'use strict'

angular.module('flowableModeler').service('UserService', [
  '$http',
  '$q',
  function ($http, $q) {
    var httpAsPromise = function (options) {
      var deferred = $q.defer()
      $http(options)
        .success(function (response, status, headers, config) {
          deferred.resolve(response)
        })
        .error(function (response, status, headers, config) {
          deferred.reject(response)
        })
      return deferred.promise
    }

    /*
     * Filter users based on a filter text.
     */
    this.getFilteredUsers = function (filterText, taskId, processInstanceId) {
      var params = { filter: filterText }
      if (taskId) {
        params.excludeTaskId = taskId
      }
      if (processInstanceId) {
        params.exclusdeProcessId = processInstanceId
      }

      return httpAsPromise({
        method: 'GET',
        url: FLOWABLE.APP_URL.getEditorUsersUrl(),
        params: params
      })
    }

    this.getFilteredUsersCRC = function (filterText, taskId, processInstanceId) {
      var params = {
        condition: {
          userName: filterText
        },
        pageNum: 1,
        pageSize: 100
      }

      return httpAsPromise({
        method: 'POST',
        url: FLOWABLE.APP_URL.getEditorUsersUrlCRC(),
        data: params
      })
    }
  }
])

angular.module('flowableModeler').service('GroupService', [
  '$http',
  '$q',
  function ($http, $q) {
    var httpAsPromise = function (options) {
      var deferred = $q.defer()
      $http(options)
        .success(function (response, status, headers, config) {
          deferred.resolve(response)
        })
        .error(function (response, status, headers, config) {
          deferred.reject(response)
        })
      return deferred.promise
    }

    /*
     * Filter functional groups based on a filter text.
     */
    this.getFilteredGroups = function (filterText) {
      var params = {
        name: '',
        pageNum: 0,
        pageSize: 100
      }
      if (filterText) {
        params.name = filterText
      }

      return httpAsPromise({
        method: 'POST',
        url: FLOWABLE.APP_URL.getEditorGroupsUrl(),
        data: params
      })
    }
  }
])
